#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 10

typedef int ElemType;
typedef struct
{
  ElemType data[MAXSIZE];
  int top; // 栈顶指针
} SqStack; // Sq --> sequence--顺序

void InitStack(SqStack &S);
bool IsEmpty(SqStack S);
bool Pop(SqStack &S, ElemType &x);

int main() {}

// 初始化栈
void InitStack(SqStack &S)
{
  S.top = -1; // 初始化栈顶指针
}

// 判空
bool IsEmpty(SqStack S)
{
  return S.top == -1;
}

// 插入操作(进栈)
bool Push(SqStack &S, ElemType x)
{
  if (S.top == MAXSIZE - 1) // 栈满 (数组下标从0开始)
    return false;
  // S.top = S.top + 1;
  // S.data[S.top] = x;
  S.data[++S.top] = x; // top要先加 -- 从-1开始
  return true;
}

// 删除操作(出栈)
bool Pop(SqStack &S, ElemType &x)
{
  if (S.top == -1) // 栈空
    return false;
  x = S.data[S.top--]; // 返回删除的那个元素，并且把top减1
  return true;
}

// 读栈顶元素
bool GetTopELem(SqStack S, ElemType &x)
{
  if (S.top == -1)
    return false;
  x = S.data[S.top];
  return true;
}